package com.fejal.dao;


import java.util.List;
import com.fejal.bean.Faculdade;


public class FaculdadeDAOHibernate implements FaculdadeDAO {

	HibernateDAOFactory hibernateDAOFactory = null;
	HibernateDAO<Faculdade> hibernateDAO = null;

	public FaculdadeDAOHibernate() {
		hibernateDAOFactory = new HibernateDAOFactory();
		hibernateDAO = hibernateDAOFactory.getFaculdadeDao();
	}

	@Override
	public boolean inserir(Faculdade faculdade) throws Exception {

		boolean ok = false;

		try {
			hibernateDAO.add(faculdade);
			ok = true;

		} catch (Exception e) {
			throw new Exception(e.getMessage());
		} 

		return ok;
	}

	@Override
	public boolean alterar(Faculdade faculdade) throws Exception {

		boolean ok = false;
		
		try {
			hibernateDAO.update(faculdade);
			ok = true;

		} catch (Exception e) {
			throw new Exception(e.getMessage());
		}

		return ok;
	}

	@Override
	public boolean excluir(Faculdade faculdade) throws Exception {

		boolean ok = false;

		if (faculdade.getCursos().size() > 0) {
			throw new Exception("Erro ao excluir faculdade, faculdade com cursos.");
		}
				
		
		try {
			hibernateDAO.remove(faculdade);
			ok = true;

		} catch (Exception e) {
			throw new Exception(e.getMessage());
		} 

		return ok;
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Faculdade> getSelecionar(String CNPJ,String descricao, String sigla) {
		String 	sql = "FROM Faculdade WHERE codigoFaculdade <> 0 ";

		if (!(descricao.isEmpty())) {
			sql += "AND descricao like '" + descricao + "%' ";  
		}
		
		if (!(CNPJ.isEmpty())) {
			sql += "AND CNPJ = '" + CNPJ + "' ";  
		}
	
		if (!(sigla.isEmpty())) {
			sql += "AND sigla like '" + sigla + "%' ";
  
		}
		
		sql += "ORDER BY descricao";		
 
		List<Faculdade> lista = hibernateDAO.getSession().createQuery(sql).list();
		return lista;
	}

	@Override
	public Faculdade getFaculdade(int codigoFaculdade) {
		
		Faculdade faculdade = hibernateDAO.get(codigoFaculdade);
		return faculdade;
	}

	@Override
	public List<Faculdade> getListTodos() {
		
		List<Faculdade> list = hibernateDAO.listAll();
		return list;
	}

	@SuppressWarnings("unchecked")
	@Override
	public boolean isExiste(Faculdade faculdade) {
		// SQL para verificar se a pessoa existe
		String 	sql = 	"FROM Faculdade WHERE codigoFaculdade <> "+faculdade.getCodigoFaculdade()+" AND "+
				 		"	( descricao = '"+faculdade.getDescricao()+"' OR " +
						"	sigla = '"+faculdade.getSigla()+"')";

		List<Faculdade> lista = hibernateDAO.getSession().createQuery(sql).list();
		if(lista.size()<1){
			return false;
		} else {
			return true;
		}
	}
}
